<!DOCTYPE html>
<html>

<body>

    <h1>JavaScript 函数</h1>

    <p id="demo"></p>

    <script>
        /*1.函数定义*/
        function myFunction(a, b) {
            return a * b;
        }
        console.log(myFunction(4,5));

        /*
            ================================================================================
            2.函数表达式,实际上是一个匿名函数（没有名称的函数）;存放在变量中的函数不需要函数名。
            他们总是使用变量名调用。

            ================================================================================
        */
        var x = function (a, b) {return a * b};
        console.log(x(4,5));
        
        
        /*
            ================================================================================
            3.函数提升(hoisting),即：JavaScript 将声明移动到当前作用域顶端的默认行为。
            JavaScript 函数能够在声明之前被调用。
            使用表达式定义的函数不会被提升。

            ================================================================================
        */
        console.log(myFunction1(4,5));

        function myFunction1(a, b) {
            return a * b;
        }

        /*
            ================================================================================
            4.自调用函数;函数表达式可以作为“自调用”。使用括号包围函数,表明它是一个函数表达式，再
            使用()执行函数。实际是匿名的自调用函数。

            ================================================================================
        */        
        (function () {
            console.log("Hello");// 我会调用我自己
        })();
        (function (x,y) {
            console.log(x*y);// 我会调用我自己
        })(4,5);
        
        /*
            ================================================================================
            5.箭头函数(ES6语法);可以省略function 关键字、return 关键字和花括号;箭头函数未被提升。

            ================================================================================
        */    
        const z = (x, y) => x * y;    
        console.log(z(4,5));
    </script>
</body>

</html>